jak realizovat refresh? (Firebird)

Otázka od: bleak

1. 10. 2002 12:25

Mam svou hotovou aplikaci (USEP) a program Interbase WorkBench (IBW). Kdyz v
USEP zmenim zaznam v tabulce a v IBW udelam dotaz SQL, tak tam tu zmenu
vidim.

Kdyz zmenim zaznam v IBW a necham ten zaznam zobrazit v USEP, tak tam zmena
neni videt (je tam puvodni obsah zaznamu). Az po novem spusteni programu
(IBDatabase.Disconnect - Connect).

Jak asi Interbase WorkBench taha data z tabulky? Jak zjisti, ze musi provest
refresh a jak se refresh provede (je to metoda komponenty napr. IBDatabase?,
urcite to neni IbSQL.Refresh...)

Jede to lokalne, zkousel jsem i jakoby sitový provoz, ale pouze tak, ze jsem
zadal IbDatabase.Host:='127.0.0.1'

bleak


---
Odchozí zpráva neobsahuje viry.
Zkontrolováno antivirovým systémem AVG (http://www.grisoft.cz).
Verze: 6.0.391 / Virová báze: 222 - datum vydání: 19.9.2002

Odpovedá: Martin Schayna

1. 10. 2002 15:46

----- Original Message -----
From: "bleak" <bleak@mvesely.com>
> Kdyz zmenim zaznam v IBW a necham ten zaznam zobrazit v USEP, tak tam zmena
> neni videt (je tam puvodni obsah zaznamu). Az po novem spusteni programu
> (IBDatabase.Disconnect - Connect).

IBW neznam ale v mem oblibenem IBExpertu Personal se skoro vsechno musi
Commitovat.
Vsude kde to jen pripada v uvahu (a tedy i v dotazech) musis provest Commit,
abys videl zmeny pres jineho uzivatele.
Martin Schayna

Odpovedá: Pavel Cisar

1. 10. 2002 17:07

Haj hou!

On 1 Oct 2002 at 6:57, bleak wrote:

> Mam svou hotovou aplikaci (USEP) a program Interbase WorkBench (IBW). Kdyz v
> USEP zmenim zaznam v tabulce a v IBW udelam dotaz SQL, tak tam tu zmenu
> vidim.
>
> Kdyz zmenim zaznam v IBW a necham ten zaznam zobrazit v USEP, tak tam zmena
> neni videt (je tam puvodni obsah zaznamu). Az po novem spusteni programu
> (IBDatabase.Disconnect - Connect).

Ja bych sazel na odlisnosti v urovni izolace (parametru) transakce. IBW
zrejme pouziva read committed, zatimco vas program zrejme snapshot
(default) + commit retaining. Pokud se u snapshot transakce provadi
commit retaining (interne pouzivaji IBX pokud neni transakce rizena
explicitne a jinak) misto tvrdeho commit, pak se prenasi kontext
transakce a data potvrzena jinymi transakcemi nejsou videt. Je treba
pouzit tvrdy commit nebo jinou uroven izolace transakce.
 
S pozdravem
Pavel Cisar
Mobil: 0724 281429
http://www.ibphoenix.cz
Vse co potrebujete pro Firebird a InterBase

Odpovedá: bleak

2. 10. 2002 19:49

dekuji, nakonec jsem to vyresil tak, ze po provedenem SQL dotazu provedu
IBTransaction.Disconnect. Pak jsou pri dalsim dotazu skutecne nactena
spravna (zmenena) data.
Ale nevim jestli je to spravne reseni.

bleak

> Ja bych sazel na odlisnosti v urovni izolace (parametru) transakce. IBW
> zrejme pouziva read committed, zatimco vas program zrejme snapshot
> (default) + commit retaining. Pokud se u snapshot transakce provadi
> commit retaining (interne pouzivaji IBX pokud neni transakce rizena
> explicitne a jinak) misto tvrdeho commit, pak se prenasi kontext
> transakce a data potvrzena jinymi transakcemi nejsou videt. Je treba
> pouzit tvrdy commit nebo jinou uroven izolace transakce.
>
> S pozdravem
> Pavel Cisar



Odpovedá: Lebeda David

4. 10. 2002 12:03

> dekuji, nakonec jsem to vyresil tak, ze po provedenem SQL dotazu
> provedu IBTransaction.Disconnect. Pak jsou pri dalsim dotazu skutecne
> nactena spravna (zmenena) data. Ale nevim jestli je to spravne reseni.
>

IMHO neni. Problem ale neni v tom, jak co spravne nastavit, ale
(zda se mi) v nespravnem pouzivani transakci.

1) Povazuji za spravne, aby kazdy dataset mel vlastni komponentu
IBTransaction, pouze s vyjimkou pripadu, kdy programator opravdu
cilene chce delat SQL prikazy z vice datasetu pod jednou transakci.

2) Velmi casto ma smysl zmenit defaultni nastaveni IBTransaction.
Dvojklik na komponente, zvolit Read commited.

3) V souvislosti s bodem 2 je velmi ucelne se pokusit co nejvice
porozumet rizeni transakci v IB ci FB a jejich izolacnim urovnim,
zejmena ve vztahu k moznym konfliktum s ostatnimi transakcemi,
protoze jinak to bude jen pokusniceni s cernou skrinkou, a to neni
dobry zaklad pro kvalitni databazovou aplikaci.

4) Neni spatne vedet, ze pro transakce, v nichz probiha pouze
select, je mozne do parametru transakce pripsat slovo read, cimz se
ta transakce stane read only transakci (coz prakticky vylucuje
konflikt s jinou transakci a je mozne, ze takova transakce bude v
jistem smyslu uspornejsi).

David Lebeda

Odpovedá: Pavel Cisar

4. 10. 2002 10:59

Haj hou!

On 2 Oct 2002 at 17:04, bleak wrote:

> dekuji, nakonec jsem to vyresil tak, ze po provedenem SQL dotazu provedu
> IBTransaction.Disconnect. Pak jsou pri dalsim dotazu skutecne nactena
> spravna (zmenena) data.
> Ale nevim jestli je to spravne reseni.

To neni zrovna nejstastnejsi. Jednak Disconnect neni regulerni ukonceni
transakce, tim je Commit nebo Rollback. Disconnect ovsem u IBX provede
implicitni ukonceni transakce, jehoz typ se da nastavit v property
(tusim) DefaultAction (defaultne je to Commit). Shodou okolnosti je
vysledek prave takovy, jaky chcete, ale systemove spravne reseni to neni.
Doporucuji seznamit se podrobneji s problematikou transakci (nejen u
IB/FB), izolacnich urovni atd. a zaridit se podle toho.

S pozdravem
Pavel Cisar
Mobil: 0724 281429
http://www.ibphoenix.cz
Vse co potrebujete pro Firebird a InterBase